#include <my_header.h>
// 内存泄露
/* Usage: ./13_pthread_cleanup */

void * func(void *arg){
    void *p1 = malloc(4);
    void *p2 = malloc(4);

    int fd = open("Makefile", O_RDWR);
    // ... 其它代码
    close(fd); // 有没有可能代码在这个， 被取消了？这决定了p1, p2的空间会不会被释放？

    free(p2);
    free(p1);
    return NULL;
}
int main()
{
    pthread_t  pid;
    int res = pthread_create(&pid, NULL, func, NULL);
    THREAD_ERROR_CHECK(res, "pthread_create");

    int res_cancel = pthread_cancel(pid);// 取消线程
    THREAD_ERROR_CHECK(res_cancel, "pthread_cancel");

    int res_join = pthread_join(pid, NULL);
    THREAD_ERROR_CHECK(res_join, "pthread_join");

    return 0;
}

